Behavioral Test
To assess participants’ executive functions, we employed the Attentional Network Task (ANT; Fan et al., 2002; 2009), a paradigm designed to evaluate attentional focus capacity. In a sequence of trials, participants were instructed to promptly indicate the direction (left or right) of a target arrow presented on a computer screen. The target arrow was flanked by additional arrows that could either all align in the same direction as the target (congruent condition) or diverge in the opposite direction (incongruent condition). Furthermore, in certain trials, advance cues provided information about the timing and/or location of the impending target.
Participants underwent this task on four occasions: prior to entering the scanner (Run “1_out”), within the scanner (Run “2_in”), inside the scanner with the added noise from an EPI sequence (Run “3_in_noise”), and outside the scanner (Run “4_out”). Evaluations outside the scanner were conducted in a soundproofed room, with participants seated before a computer screen displaying the stimuli. Within the scanner, stimuli were visible through a mirror mounted on the head antenna, with projections onto an LCD screen positioned at the rear of the scanner.
Refs:
Fan, Jin, Bruce D. McCandliss, Tobias Sommer, Amir Raz, and Michael I. Posner. 2002. “Testing the Efficiency and Independence of Attentional Networks.” J Cogn Neurosci 14 (3): 340–47. https://doi.org/10.1162/089892902317361886.
Fan, Jin, Xiaosi Gu, Kevin G. Guise, Xun Liu, John Fossella, Hongbin Wang, and Michael I. Posner. 2009. “Testing the Behavioral Interaction and Integration of Attentional Networks.” Brain and Cognition 70 (2): 209–20. https://doi.org/10.1016/j.bandc.2009.02.002.
Participants labeled 1 to 21 belong to the control group (no field), participants above 22 (included) belong to the experimental group (exposed to 11.7T).
Proportion of errors and slow responses to be removed for the analyses of reaction-times:
## [1] "Excluding 582 data points out of 11232 ( 5.2 %) (errors or slow responses)"
##
## Welch Two Sample t-test
##
## data: individualRTs$median_rt by individualRTs$group
## t = 0.8, df = 37, p-value = 0.4
## alternative hypothesis: true difference in means between group 0T and group 11.7T is not equal to 0
## 95 percent confidence interval:
## -25.8 61.7
## sample estimates:
## mean in group 0T mean in group 11.7T
## 538 520
##
## Welch Two Sample t-test
##
## data: perf$prop_correct by perf$group
## t = 0.6, df = 33, p-value = 0.6
## alternative hypothesis: true difference in means between group 0T and group 11.7T is not equal to 0
## 95 percent confidence interval:
## -0.0147 0.0258
## sample estimates:
## mean in group 0T mean in group 11.7T
## 0.957 0.951
print(psych::describeBy(perf, group="group"), digits=5)
##
## Descriptive statistics by group
## group: 1
## vars n mean sd median trimmed mad min max range
## subject_id 1 20 10.500 5.9161 10.500 10.50 7.413 1.000 20.000 19.0000
## group 2 20 1.000 0.0000 1.000 1.00 0.000 1.000 1.000 0.0000
## prop_correct 3 20 0.957 0.0276 0.969 0.96 0.018 0.899 0.993 0.0938
## skew kurtosis se
## subject_id 0.000 -1.381 1.32288
## group NaN NaN 0.00000
## prop_correct -0.807 -0.726 0.00617
## ------------------------------------------------------------
## group: 2
## vars n mean sd median trimmed mad min max range
## subject_id 1 18 29.889 5.7690 29.500 29.875 7.4130 21.000 39.000 18.000
## group 2 18 2.000 0.0000 2.000 2.000 0.0000 2.000 2.000 0.000
## prop_correct 3 18 0.951 0.0333 0.955 0.954 0.0257 0.872 0.997 0.125
## skew kurtosis se
## subject_id 0.0523 -1.461 1.35976
## group NaN NaN 0.00000
## prop_correct -0.7034 -0.038 0.00784
How do reaction time evolve from run 1 to 4 ? We expect that participants may get faster with time as they are more and more trained. The main question is: is the 11.7T group going to be slowed down than the 0T group when they are inside the scanner (and maybe also after) ?
Remark: because the stimulation conditions are not exactly the same in and out of the scanner, we do not expect the RTs to be the same in run2 & 3 than in run 1 & 4 (after removing the training effect).
## run group N mean sd se ci
## 1 1_out 0T 20 545 82.7 18.5 38.7
## 2 1_out 11.7T 19 527 96.5 22.1 46.5
## 3 2_in 0T 20 575 78.2 17.5 36.6
## 4 2_in 11.7T 19 554 64.0 14.7 30.8
## 5 3_in_noise 0T 20 559 76.6 17.1 35.8
## 6 3_in_noise 11.7T 19 550 68.5 15.7 33.0
## 7 4_out 0T 20 519 65.3 14.6 30.5
## 8 4_out 11.7T 19 510 69.5 15.9 33.5
The participants must classify the direction of the central arrow. The neighboring arrows can point toward the same direction (“congruent” condition), or the opposite direction (“incongruent” condition). The difference in performance between the incongruent and the congruent conditions (the “flanker cost”) measures how well the participant can “focus” his/her attention on the central arrow, inhibiting the influence of the irrelevant flanking arrows.
runeffect <- allc %>%
group_by(subject_id, run, group, flanker_congruency) %>%
summarize(mean_rt = mean(reaction_time, na.rm=TRUE))
## `summarise()` has grouped output by 'subject_id', 'run', 'group'. You can
## override using the `.groups` argument.
runs <- summarySE(runeffect, measurevar="mean_rt", groupvars=c("run", "group", "flanker_congruency"))
pd <- position_dodge(0.001)
ggplot(runs, aes(x=run, y=mean, color= flanker_congruency)) +
geom_point(position=pd) +
geom_line(aes(group = flanker_congruency), position=pd) +
geom_errorbar(aes(ymin=mean-se, ymax=mean+se, color=flanker_congruency), width=.1, position=pd) +
facet_wrap(~group) + ylim(350, 750) + ylab("Reaction-times (ms)")
rt_mod <- aov_car(mean_rt ~ group + Error(subject_id/flanker_congruency * run), data=runeffect)
## Contrasts set to contr.sum for the following variables: group
knitr::kable(nice(rt_mod))
| Effect | df | MSE | F | ges | p.value |
|---|---|---|---|---|---|
| group | 1, 37 | 43570.87 | 0.33 | .007 | .567 |
| flanker_congruency | 1, 37 | 4854.37 | 266.18 *** | .392 | <.001 |
| group:flanker_congruency | 1, 37 | 4854.37 | 0.12 | <.001 | .736 |
| run | 2.21, 81.64 | 2006.16 | 27.89 *** | .058 | <.001 |
| group:run | 2.21, 81.64 | 2006.16 | 0.40 | <.001 | .690 |
| flanker_congruency:run | 2.55, 94.21 | 488.73 | 3.01 * | .002 | .042 |
| group:flanker_congruency:run | 2.55, 94.21 | 488.73 | 0.61 | <.001 | .581 |
require(emmeans)
## Loading required package: emmeans
The flanker effect is the difference between inconguent and congruent conditions.
runs2 <- reshape(runs, idvar=c("run", "group"), timevar="flanker_congruency", direction = "wide")
runs2$cost <- runs2$mean.incong - runs2$mean.cong
pd <- position_dodge(0.1)
ggplot(runs2, aes(x=run, y=cost, colour = group), show.legend = FALSE) +
geom_point(position=pd) +
geom_line(aes(group=group), position=pd) +
geom_errorbar(aes(ymin=cost-se.incong, ymax=cost+se.incong), width=.1, position=pd) +
ylim(0, 250) +
ylab("Flanker cost (ms)")
Method: Before and after participants entered the scanner, their static balance was assessed. They stepped for 10s (TODO: Check duration), first with their eyes open, then with eyes closed, on a plateform (AbilyCareTODO: insert REF) that computed a stability score (ranging from 0 to 99).
Result: Whether the stability test was taken with eyes opened or with eyes closed, all participants from both groups stayed in the normal stability range (90-99). Moreover, there was no significant nor sizeable effect of exposure to the scanner, nor any difference between the control (0T) and the experimental (11.7T) groups (see below for average groups scores and the relevant t-tests).
Test conditions (O1, O2, C1, C2):
The score represents the probability of belonging to a “normal” group of people without balance issues.
According to an AbilyCare company internal test, a group of people with balance issues had a average score of 40.
I selected 50-90 on the y scale. No participant was below 90.
ggplot(equill, aes(x=test, y=score, color=group, fill=group)) + geom_col() + facet_wrap(~subject_id) + coord_cartesian(ylim = c(50, 100))
summary(equilibre)
## subject_id group O1 C1 O2
## Min. : 1.0 0T :20 Min. :94.0 Min. :95.0 Min. :91.0
## 1st Qu.:10.8 11.7T:20 1st Qu.:99.0 1st Qu.:99.0 1st Qu.:99.0
## Median :21.5 Median :99.0 Median :99.0 Median :99.0
## Mean :21.2 Mean :98.8 Mean :98.8 Mean :98.7
## 3rd Qu.:31.2 3rd Qu.:99.0 3rd Qu.:99.0 3rd Qu.:99.0
## Max. :43.0 Max. :99.0 Max. :99.0 Max. :99.0
## C2
## Min. :94.0
## 1st Qu.:98.8
## Median :99.0
## Mean :98.5
## 3rd Qu.:99.0
## Max. :99.0
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?
## Contrasts set to contr.sum for the following variables: group
| Effect | df | MSE | F | ges | p.value |
|---|---|---|---|---|---|
| group | 1, 38 | 1.51 | 1.66 | .014 | .206 |
| test | 2.38, 90.53 | 1.26 | 0.91 | .016 | .422 |
| group:test | 2.38, 90.53 | 1.26 | 0.55 | .010 | .610 |
fc = bind_cols(select(physio, c("Rang", "group")), select(physio, contains("FC")))
print(fc, n=100)
## # A tibble: 41 × 11
## Rang group `FC 1` `FC 2` `FC 3` `FC 4` `FC 5` `FC 6` `FC 7` `FC 8` `FC 9`
## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 A 84 63 61 63 64 80 64 NA 87
## 2 2 A 67 68 66 59 63 61 64 NA 70
## 3 3 A 87 72 64 63 61 60 63 NA 75
## 4 4 A 65 67 61 57 74 65 71 NA 64
## 5 5 A 65 54 54 56 60 62 67 NA 68
## 6 6 A 79 76 75 71 76 72 77 NA 85
## 7 7 A 92 79 78 76 78 91 73 NA 88
## 8 8 A 76 80 69 66 67 73 58 NA 74
## 9 9 A 82 72 74 70 72 66 71 NA 87
## 10 10 A 56 83 74 62 61 55 64 NA 57
## 11 11 A 65 63 63 59 63 69 70 NA 71
## 12 12 A 74 71 69 58 54 57 52 NA 66
## 13 13 A 65 62 65 64 65 64 61 NA 62
## 14 14 A 61 54 56 52 65 56 54 NA 58
## 15 15 A 58 68 58 57 54 53 NA NA 60
## 16 16 A 69 61 62 62 61 62 66 NA 73
## 17 17 A 94 NA NA NA NA NA NA NA NA
## 18 18 A 62 66 62 63 71 66 74 NA 61
## 19 19 A 69 69 75 67 65 65 65 NA 68
## 20 20 A 51 52 56 55 69 52 57 NA 54
## 21 21 A 78 60 56 52 52 56 51 NA 80
## 22 22 B 91 69 75 65 59 64 65 60 80
## 23 23 B 57 50 52 56 55 51 48 58 60
## 24 24 B 68 58 61 51 49 56 52 NA 53
## 25 25 B 42 45 47 45 45 45 54 54 44
## 26 26 B 65 55 54 49 52 49 50 69 65
## 27 27 B 116 67 77 62 65 83 88 NA 79
## 28 28 B 46 44 47 52 55 62 51 NA 53
## 29 29 B 72 85 90 75 76 74 83 NA 78
## 30 30 B 58 57 50 NA NA NA 53 NA 47
## 31 31 B 95 93 105 78 101 95 NA NA 79
## 32 32 B 56 60 63 53 56 62 68 NA 54
## 33 33 B 67 63 62 62 58 81 70 NA 71
## 34 34 B 51 55 58 59 56 55 65 NA 57
## 35 35 B 70 59 66 67 69 73 74 NA 69
## 36 36 B 85 83 79 71 79 85 83 NA 76
## 37 37 B 74 105 71 68 65 70 71 NA 76
## 38 38 B 61 70 52 41 40 48 48 NA 84
## 39 41 B 56 55 67 51 50 49 55 NA 54
## 40 42 B 51 43 43 43 48 53 65 NA 70
## 41 43 B 112 62 59 53 54 50 58 NA 57
fcl = pivot_longer(fc, -(1:2))
ggplot(fcl, aes(x=name, y=value, group=Rang, color=group)) + geom_point() + geom_line(aes(group=Rang)) +geom_text(aes(label=Rang, hjust=2), position=position_dodge())
## Warning: Width not defined
## ℹ Set with `position_dodge(width = ...)`
## Warning: Removed 49 rows containing missing values (`geom_point()`).
## Warning: Removed 8 rows containing missing values (`geom_line()`).
## Warning: Removed 49 rows containing missing values (`geom_text()`).
spo2 = bind_cols(select(physio, c("Rang", "group")), select(physio, contains("SpO2")))
print(spo2, n=100)
## # A tibble: 41 × 11
## Rang group `SpO2 1` `SpO2 2` `SpO2 3` `SpO2 4` `SpO2 5` `SpO2 6` `SpO2 7`
## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 A 99 99 97 96 99 100 100
## 2 2 A 97 94 93 97 98 98 98
## 3 3 A 98 99 99 98 94 99 94
## 4 4 A 97 99 99 98 100 100 99
## 5 5 A 100 100 100 100 99 100 100
## 6 6 A 99 100 100 100 99 99 99
## 7 7 A 99 98 99 98 98 97 99
## 8 8 A 98 97 97 96 97 98 97
## 9 9 A 97 97 98 96 100 100 100
## 10 10 A 97 100 100 100 99 99 99
## 11 11 A 97 96 95 96 96 98 98
## 12 12 A 98 99 98 97 99 99 99
## 13 13 A 99 94 94 92 98 95 95
## 14 14 A 97 99 97 96 96 96 98
## 15 15 A 99 91 93 98 NA NA NA
## 16 16 A 98 99 100 99 99 99 97
## 17 17 A 99 NA NA NA NA NA NA
## 18 18 A 98 94 98 98 94 97 100
## 19 19 A 100 100 100 100 100 100 100
## 20 20 A 96 98 98 96 97 98 98
## 21 21 A 98 93 94 94 94 92 89
## 22 22 B 99 93 94 92 93 97 93
## 23 23 B 99 95 91 94 90 93 96
## 24 24 B 100 100 100 100 100 100 100
## 25 25 B 96 98 96 95 93 98 96
## 26 26 B 98 98 95 96 96 94 91
## 27 27 B 97 96 95 97 94 97 93
## 28 28 B 97 95 92 90 94 97 98
## 29 29 B 100 100 100 95 100 100 100
## 30 30 B 98 91 84 NA NA NA 93
## 31 31 B 95 97 98 96 99 97 NA
## 32 32 B 96 100 99 98 99 100 100
## 33 33 B 97 97 96 99 98 99 99
## 34 34 B 98 94 93 94 80 92 92
## 35 35 B 98 99 100 98 99 100 99
## 36 36 B 98 99 100 97 96 94 95
## 37 37 B 99 100 100 99 100 99 98
## 38 38 B 97 92 83 88 96 97 98
## 39 41 B 100 100 100 100 100 96 98
## 40 42 B 99 91 94 94 90 94 99
## 41 43 B 98 99 98 98 98 97 98
## # ℹ 2 more variables: `SpO2 8` <dbl>, `SpO2 9` <dbl>
spo2l = pivot_longer(spo2, -(1:2))
ggplot(spo2l, aes(x=name, y=value, group=Rang, color=group)) + geom_point() + geom_line(aes(group=Rang)) +geom_text(aes(label=Rang, hjust=2), position=position_dodge())
## Warning: Width not defined
## ℹ Set with `position_dodge(width = ...)`
## Warning: Removed 51 rows containing missing values (`geom_point()`).
## Warning: Removed 8 rows containing missing values (`geom_line()`).
## Warning: Removed 51 rows containing missing values (`geom_text()`).
pas = bind_cols(select(physio, c("Rang", "group")), select(physio, contains("PAS")))
print(pas, n=100)
## # A tibble: 41 × 11
## Rang group `PAS 1` `PAS 2` `PAS 3` `PAS 4` `PAS 5` `PAS 6` `PAS 7` `PAS 8`
## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 A 127 109 109 107 114 122 130 NA
## 2 2 A 124 139 140 121 119 128 126 NA
## 3 3 A 141 112 130 119 120 126 132 NA
## 4 4 A 101 103 102 99 99 99 100 NA
## 5 5 A 93 102 100 102 102 98 96 NA
## 6 6 A 108 113 113 110 111 108 109 NA
## 7 7 A 115 109 110 107 104 105 105 NA
## 8 8 A 117 100 108 110 103 105 106 NA
## 9 9 A 116 111 114 114 118 116 113 NA
## 10 10 A 112 112 120 121 123 116 132 NA
## 11 11 A 128 102 114 100 106 118 110 NA
## 12 12 A 93 105 109 94 104 99 107 NA
## 13 13 A 112 113 116 117 115 NA 111 NA
## 14 14 A 111 119 114 104 107 111 114 NA
## 15 15 A 116 132 99 125 127 122 129 NA
## 16 16 A 120 128 108 108 114 114 121 NA
## 17 17 A 115 NA NA NA NA NA NA NA
## 18 18 A 105 103 111 108 103 98 102 NA
## 19 19 A 109 112 123 109 109 111 107 NA
## 20 20 A 110 111 137 115 116 105 122 NA
## 21 21 A 104 105 107 103 108 107 109 NA
## 22 22 B 124 121 130 124 116 124 122 134
## 23 23 B 128 123 135 135 114 114 131 122
## 24 24 B 113 121 124 121 119 119 124 NA
## 25 25 B 121 123 115 122 128 129 112 129
## 26 26 B 129 108 117 108 108 110 109 111
## 27 27 B 126 104 113 96 100 99 107 NA
## 28 28 B 132 119 128 121 117 122 124 NA
## 29 29 B 96 103 106 93 104 95 100 NA
## 30 30 B 138 125 124 127 130 114 120 NA
## 31 31 B 95 90 108 100 102 109 NA NA
## 32 32 B 132 126 125 125 125 121 126 NA
## 33 33 B 102 101 109 114 108 115 114 NA
## 34 34 B 106 103 100 102 99 109 110 NA
## 35 35 B 132 130 124 113 120 118 116 NA
## 36 36 B 109 96 99 91 90 93 88 NA
## 37 37 B 99 111 118 102 106 105 98 NA
## 38 38 B 104 113 122 114 111 106 108 NA
## 39 41 B 103 105 110 110 93 102 104 NA
## 40 42 B 110 106 102 94 104 107 109 NA
## 41 43 B 71 117 121 119 121 121 117 NA
## # ℹ 1 more variable: `PAS 9` <dbl>
pasl = pivot_longer(pas, -(1:2))
ggplot(pasl, aes(x=name, y=value, group=Rang, color=group)) + geom_point() + geom_line(aes(group=Rang)) +geom_text(aes(label=Rang, hjust=2), position=position_dodge())
## Warning: Width not defined
## ℹ Set with `position_dodge(width = ...)`
## Warning: Removed 46 rows containing missing values (`geom_point()`).
## Warning: Removed 8 rows containing missing values (`geom_line()`).
## Warning: Removed 46 rows containing missing values (`geom_text()`).
pad = bind_cols(select(physio, c("Rang", "group")), select(physio, contains("PAD")))
print(pad, n=100)
## # A tibble: 41 × 11
## Rang group `PAD 1` `PAD 2` `PAD 3` `PAD 4` `PAD 5` `PAD 6` `PAD 7` `PAD 8`
## <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 A 58 54 59 60 58 63 60 NA
## 2 2 A 62 61 54 65 59 59 53 NA
## 3 3 A 81 79 62 56 63 68 64 NA
## 4 4 A 60 67 62 61 58 59 57 NA
## 5 5 A 53 48 52 55 51 52 58 NA
## 6 6 A 77 74 70 70 67 76 75 NA
## 7 7 A 71 70 69 69 63 63 66 NA
## 8 8 A 70 70 70 68 67 61 64 NA
## 9 9 A 73 67 70 70 71 62 65 NA
## 10 10 A 69 65 60 59 54 45 50 NA
## 11 11 A 81 62 68 65 70 67 66 NA
## 12 12 A 62 71 67 66 66 52 69 NA
## 13 13 A 65 71 76 64 68 NA 67 NA
## 14 14 A 62 61 58 53 54 57 59 NA
## 15 15 A 83 71 77 61 57 64 64 NA
## 16 16 A 72 66 72 72 66 72 72 NA
## 17 17 A 56 NA NA NA NA NA NA NA
## 18 18 A 65 67 73 67 66 61 66 NA
## 19 19 A 70 73 76 71 69 68 72 NA
## 20 20 A 67 79 59 61 64 52 53 NA
## 21 21 A 62 69 65 65 63 69 78 NA
## 22 22 B 76 55 70 66 81 66 72 73
## 23 23 B 88 55 54 54 62 62 70 58
## 24 24 B 63 71 83 73 90 81 87 NA
## 25 25 B 76 70 73 75 72 86 77 82
## 26 26 B 79 77 69 66 58 67 60 67
## 27 27 B 70 61 54 59 57 59 57 NA
## 28 28 B 66 51 60 47 48 62 57 NA
## 29 29 B 65 76 59 63 72 70 74 NA
## 30 30 B 83 61 57 61 58 65 58 NA
## 31 31 B 63 57 6 56 99 70 NA NA
## 32 32 B 78 64 63 63 57 57 56 NA
## 33 33 B 56 60 61 62 62 67 72 NA
## 34 34 B 54 65 52 48 54 57 53 NA
## 35 35 B 68 60 74 51 63 48 76 NA
## 36 36 B 65 55 66 48 51 61 54 NA
## 37 37 B 59 59 59 56 60 63 54 NA
## 38 38 B 76 77 73 58 62 59 66 NA
## 39 41 B 68 67 73 73 62 63 68 NA
## 40 42 B 72 50 54 60 54 64 62 NA
## 41 43 B 65 60 62 57 53 56 68 NA
## # ℹ 1 more variable: `PAD 9` <dbl>
padl = pivot_longer(pad, -(1:2))
ggplot(padl, aes(x=name, y=value, group=Rang, color=group)) + geom_point() + geom_line(aes(group=Rang)) +geom_text(aes(label=Rang, hjust=2), position=position_dodge())
## Warning: Width not defined
## ℹ Set with `position_dodge(width = ...)`
## Warning: Removed 46 rows containing missing values (`geom_point()`).
## Warning: Removed 8 rows containing missing values (`geom_line()`).
## Warning: Removed 46 rows containing missing values (`geom_text()`).
temp = bind_cols(select(physio, c("Rang", "group")), select(physio, contains("Temp")))
print(temp, n=100)
## # A tibble: 41 × 4
## Rang group `Temp 1` `Temp 2`
## <dbl> <chr> <dbl> <dbl>
## 1 1 A 364 367
## 2 2 A 37 375
## 3 3 A 364 367
## 4 4 A 363 375
## 5 5 A 368 376
## 6 6 A 362 365
## 7 7 A 36 359
## 8 8 A 369 366
## 9 9 A 364 369
## 10 10 A 378 376
## 11 11 A 36 363
## 12 12 A 361 36
## 13 13 A 366 363
## 14 14 A 368 369
## 15 15 A 361 364
## 16 16 A 375 363
## 17 17 A 377 NA
## 18 18 A 372 369
## 19 19 A 367 37
## 20 20 A 356 363
## 21 21 A 363 367
## 22 22 B 372 367
## 23 23 B 367 368
## 24 24 B 366 367
## 25 25 B 362 364
## 26 26 B 367 361
## 27 27 B 37 NA
## 28 28 B 37 366
## 29 29 B 368 366
## 30 30 B 359 358
## 31 31 B 361 369
## 32 32 B 371 37
## 33 33 B 376 377
## 34 34 B 369 372
## 35 35 B 366 367
## 36 36 B 365 364
## 37 37 B 372 366
## 38 38 B 352 361
## 39 41 B 364 362
## 40 42 B 365 364
## 41 43 B 365 366
templ = pivot_longer(temp, -(1:2))
ggplot(templ, aes(x=name, y=value, group=Rang, color=group)) + geom_point() + geom_line(aes(group=Rang)) +geom_text(aes(label=Rang, hjust=2), position=position_dodge())
## Warning: Width not defined
## ℹ Set with `position_dodge(width = ...)`
## Warning: Removed 2 rows containing missing values (`geom_point()`).
## Warning: Removed 2 rows containing missing values (`geom_line()`).
## Warning: Removed 2 rows containing missing values (`geom_text()`).